package com.xjj.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONUtil;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.xjj.entity.Discuss;
import com.xjj.mapper.DiscussMapper;
import com.xjj.service.DiscussService;
import com.xjj.vo.DiscussVo;
import org.apache.ibatis.annotations.Result;
import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import springfox.documentation.spring.web.json.Json;

import javax.annotation.Resource;
import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @ClassName DiscussServiceImpl
 * @Description TODO
 * @Author 于文龙
 * @Date 2022/10/20 22:18
 * @Version 1.0
 **/
@Service
@Transactional
public class DiscussServiceImpl extends ServiceImpl<DiscussMapper,Discuss> implements DiscussService {
    @Resource
    private DiscussMapper discussMapper;
    @Resource
    StringRedisTemplate stringRedisTemplate;
    @Resource
    RedisTemplate redisTemplate;

    //查看当前先相册下所有评论
    @Override
    public List<Discuss> findAllDisscussByPhotoId(int id) {
        //先查询缓存
        List<Discuss> discusses = (List<Discuss>) redisTemplate.opsForValue().get("photo:getDiscussByPhotoId" + id);
        //缓存不存在查询数据库
        if(discusses==null||discusses.size()==0){
            List<Discuss> discussList = discussMapper.findAllDisscussByPhotoId(id);
            //将数据存入缓存
            redisTemplate.opsForValue().set("photo:getDiscussByPhotoId" + id,discussList);
            return discussList;
        }else{
            return discusses;
        }
    }
    /*@Override
    public List<Discuss> findAllDisscussByPhotoId(int id) {
        //先查询缓存
        String discusses = stringRedisTemplate.opsForValue().get("photo:getDiscussByPhotoId" + id);
        //缓存不存在查询数据库
        if(StrUtil.isBlank(discusses)){
            List<Discuss> discussList = discussMapper.findAllDisscussByPhotoId(id);
            //将数据存入缓存
            String s = JSONUtil.toJsonStr(discussList);
            stringRedisTemplate.opsForValue().set("photo:getDiscussByPhotoId" + id,s);
            return discussList;
        }else{
            List<Discuss> parse = (List<Discuss>)JSON.parse(discusses);
            for (Discuss discuss : parse) {
                System.out.println(discuss);
            }
            return parse;
        }
    }*/

    //查看评论最大层数
    @Override
    public int findMaxFloor() {
        return discussMapper.findMaxFloor();
    }

    //发布评论
    @Override
    public Discuss add(Discuss discuss) {
        Date date = new Date();
        long time = date.getTime()/1000;
        String s = String.valueOf(time);
        if(discuss.getFloor()==0){
            int maxFloor=discussMapper.findMaxFloor();
            discuss.setFloor(maxFloor+1);
            discuss.setTime(s);
            discussMapper.insert(discuss);
            redisTemplate.delete("photo:getDiscussByPhotoId" + discuss.getPhotoId());
            return discussMapper.findByFloor(discuss.getFloor());
        }else{
            discuss.setTime(s);
            discussMapper.add(discuss);
            redisTemplate.delete("photo:getDiscussByPhotoId" + discuss.getPhotoId());
            Discuss discuss1 = discussMapper.findById(discuss.getId());
            discuss1.setParent(discussMapper.findParentBySenderId(discuss1.getSenderId()));
            discuss1.setPDiscuss(discussMapper.findByPid(discuss1.getPid()));
            return discuss1;
        }
    }

    @Override
    public void deleteById(int discussId,int photoId) {
        redisTemplate.delete("photo:getDiscussByPhotoId" + photoId);
        discussMapper.deleteById(discussId);
    }
}
